#include "rhotablemodel.h"

RhoTableModel::RhoTableModel(QObject *parent)
    : QAbstractTableModel{parent}
{
}

void RhoTableModel::setModelData(const QList<EmRhoModel> &datas)
{
    //重置model数据之前调用beginResetModel，此时会触发modelAboutToBeReset信号
    beginResetModel();


    modelData.clear();

    for (EmRhoModel model : datas) {
        modelData.append(model);
    }

    //重置model中的数据
    // modelData = datas;

    //数据设置结束后调用endResetModel，此时会触发modelReset信号
    endResetModel();
    //注意：reset model后，选中的item会失效，我们可以自己写保存和恢复选中项的逻辑
    //如果表的行列数是固定的，只是数据变更了，我们可以用 dataChanged 信号来请求刷新。
    //emit dataChanged(index(0,0),index(RowMax-1,ColMax-1),QVector<int>());

}


//获取行数
int RhoTableModel::rowCount(const QModelIndex &parent) const
{
    if (parent.isValid())
        return 0;

    return modelData.count();
}

//获取列数
int RhoTableModel::columnCount(const QModelIndex &parent) const
{
    if (parent.isValid())
        return 0;

    return 17;
}

//获取单元格数据
QVariant RhoTableModel::data(const QModelIndex &index, int role) const
{
    if (index.isValid())
        return 0;

    if (role == Qt::DisplayRole || role == Qt::EditRole)
    {
        //DisplayRole返回显示的文本值
        const int row = index.row();
        switch(index.column())
        {
            case 0: return modelData.at(row).Line;
            case 1: return modelData.at(row).Point;
            case 2: return modelData.at(row).DistancePoint;
            case 3: return modelData.at(row).Fre;
            case 4: return modelData.at(row).I;
            case 5: return modelData.at(row).V;
            case 6: return modelData.at(row).Error;
            case 7: return modelData.at(row).Rho;
            case 8: return modelData.at(row).Mx;
            case 9: return modelData.at(row).My;
            case 10: return modelData.at(row).Nx;
            case 11: return modelData.at(row).Ny;
            case 12: return modelData.at(row).Z;
            case 13: return modelData.at(row).Ax;
            case 14: return modelData.at(row).Ay;
            case 15: return modelData.at(row).Bx;
            case 16: return modelData.at(row).By;
            // 如果 column 超出了范围，可以添加一个默认情况来处理
            default: return QVariant();
        }
    }
    return QVariant();
}
